當我們用前面提到過的第七章migration把DB建立以後,測試的資料從哪裡來呢? seed 的功用就是提供測試資料,把測試的data塞進測試DB裡面的。
一樣有貼心的指令可以建立seed,預設路徑為 database/seeders
指令: php artisan make:seeder ProductTableSeeder
產生的檔案裡面只會有一個預設的方法 run
,其中用query builder 或是 eloquent model 加入資料都可以
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
'password' => bcrypt('secret'),
]);
}
}
不過如果需要加入的測試資料比較多,一樣建議分成不同的檔案來管理比較好,這時候只要把剛剛DatabaseSeeder.php
裡面run
method 寫的內容,改成call
抽離出來的檔案就可以了
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call([
ProductTableSeeder::class,
UserTableSeeder::class,
StockTableSeeder::class,
]);
}
需要用 dump-autoload
先重新產生composer 的 autoloader
composer dump-autoload
接著就可以用 Artisan command 的 db:seed
建立測試資料,然後就會執行上面提到,一開始預設就建立的 run
方法
php artisan db:seed
php artisan db:seed --class=ProductTableSeeder
結論: 這邊介紹的建立seed資料,可以幫助開發者在一開始都還沒有資料的時候,快速建立測試的資料,在下一章會提到如何配合模型工廠更快速的建立。
參考連結: